// TODO: Adapt them to 0.3.0
// use std::{fs::File, io::Read};

// use dj::{TokenStream, Parser, Environment, ast::{Value, Expr}, RuntimeError};
// use dj::builtin::*;
// use dj_builtin::builtin;
// use dj_codegen::builtin_method;

// #[builtin_method("println")]
// fn builtin_println(content: String) -> Result<Value, RuntimeError> {
//     println!("{content}");
//     Ok(Value::Nil)
// }

// fn main() {
//     let src = {
//         let mut f = File::open("examples/string.dj").unwrap();
//         let mut buffer = String::new();

//         f.read_to_string(&mut buffer).unwrap();

//         buffer
//     };

//     let ts = TokenStream::try_from(src.as_str()).unwrap();

//     let mut parser = Parser::new(ts);
//     let expr = match parser.parse_expr() {
//         Ok(expr) => expr,
//         Err(err) => {
//             let mut fullts = TokenStream::try_from(src.as_str()).unwrap();
//             println!("Runtime Error:{err:?}\nToken Stream:");
//             while let Ok(tok) = fullts.pop() {
//                 println!("{tok:?}");
//             }
//             panic!("parsing error.");
//         }
//     };

//     let mut env = Environment::new();
//     let _ = builtin!(&mut env, builtin_println);
//     env.set("hello", Value::Builtin(hello));
    
//     println!("ret: {}", &expr.eval(&mut env).unwrap());
// }

// fn hello(_: &mut Environment, _: &[Expr]) -> Result<Value, RuntimeError> {
//     println!("Hello!!");
//     Ok(Value::Nil)
// }

fn main() {
    println!("Wait for adaptation!")
}